package com.jic.product.controller.store;
import com.alibaba.fastjson.JSONObject;
import com.jic.common.base.vo.PageResult;
import com.jic.common.base.vo.RestResult;
import com.jic.product.constant.consist.ResponseCode;
import com.jic.product.model.entity.MStoreStockWarning;
import com.jic.product.model.vo.request.MStoreStockWarningRequest;
import com.jic.product.model.vo.response.MStoreStockWarningResponse;
import com.jic.product.service.MStoreStockWarningService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;
/**
 * @Author: 建投数据科技(山东)有限公司 
 * @date: 2020-06-10 10:48:01
 */
 @RestController
 @Slf4j
 @RequestMapping("/mStoreStockWarning")
 @Api(tags = " [库存预警表]控制类-PC")
public class MStoreStockWarningController {
	@Autowired
	private MStoreStockWarningService service;
	
	/**
	 * 新增记录
	 * @param request 新增[库存预警表]请求参数
	 * @return MStoreStockWarningResponse 新增[库存预警表]响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	@ApiOperation(value = "新增[库存预警表]记录")
	@PostMapping("/save")
	@ResponseBody
	public RestResult<Long> save(@RequestBody MStoreStockWarningRequest request) throws Throwable {
			MStoreStockWarning mStoreStockWarning = new MStoreStockWarning();
			BeanUtils.copyProperties(request, mStoreStockWarning);
			mStoreStockWarning.setDeptId(request.getAdminOperate().getDeptId());
			long flag = service.save(mStoreStockWarning);
	 		return RestResult.success(flag);
	}
	/**
	 * 新增或修改记录
	 * @param request 新增或修改[库存预警表]请求参数
	 * @return MStoreStockWarningResponse 新增或修改[库存预警表]响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	@ApiOperation(value = "保存或更新[库存预警表]")
	@PostMapping("/saveOrUpdate")
	 @ResponseBody
	public RestResult<Long> saveOrUpdate(@Validated @RequestBody MStoreStockWarningRequest request) throws Throwable {
			MStoreStockWarning mStoreStockWarning = new MStoreStockWarning();
			BeanUtils.copyProperties(request, mStoreStockWarning);
			mStoreStockWarning.setDeptId(request.getAdminOperate().getDeptId());
			long flag =   service.saveOrUpdate(mStoreStockWarning);
	 		return RestResult.success(flag);
	}
	/**
	 * 删除记录
	 * @param request 删除[库存预警表]请求参数
	 * @return MStoreStockWarningResponse 删除[库存预警表]响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	@ApiOperation(value = "删除[库存预警表]记录")
	@PostMapping("/delete")
	@ResponseBody
	public RestResult<Long> delete(@RequestBody MStoreStockWarningRequest request) throws Throwable {
			MStoreStockWarning mStoreStockWarning = new MStoreStockWarning();
			BeanUtils.copyProperties(request, mStoreStockWarning);
			mStoreStockWarning.setDeptId(request.getAdminOperate().getDeptId());
			long flag = service.deleteByPrimaryKeyLogically(mStoreStockWarning);
	 		return RestResult.success(flag);
	}
	/**
	 * 修改记录
	 * @param request 修改[库存预警表]请求参数
	 * @return MStoreStockWarningResponse 修改[库存预警表]响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	@ApiOperation(value = "修改[库存预警表]记录")
	@PostMapping("/update")
	@ResponseBody
	public RestResult<Long> update(@RequestBody MStoreStockWarningRequest request) throws Throwable {
			MStoreStockWarning mStoreStockWarning = new MStoreStockWarning();
			BeanUtils.copyProperties(request, mStoreStockWarning);
			mStoreStockWarning.setDeptId(request.getAdminOperate().getDeptId());
			long flag = service.updateByPrimaryKeySelective(mStoreStockWarning);
	 		return RestResult.success(flag);
	}
	/**
	 * 单表查询详情信息
	 * @param request 查询[库存预警表]详情请求参数
	 * @return MStoreStockWarningResponse 查询[库存预警表]详情响应参数
	 * author 建投数据科技(山东)有限公司
	 * @date 2020-3-11 20:54:04
	 */
	 @PostMapping("/getByPrimaryKey")
	 @ApiOperation(value = "查询[库存预警表]详情")
	 @ResponseBody
	public RestResult<MStoreStockWarningResponse> getByPrimaryKey(@Validated  @RequestBody MStoreStockWarningRequest request) {
		log.info("查询详情请求参数入参，{}", JSONObject.toJSONString(request));
		if (request!=null && request.getId()!=null) {

			MStoreStockWarning mStoreStockWarning = new MStoreStockWarning();
			BeanUtils.copyProperties(request, mStoreStockWarning);

			MStoreStockWarning result = service.getByPrimaryKey(mStoreStockWarning);
			log.info("查询详情请求参数出参，{}", JSONObject.toJSONString(result));
			if (result == null) {
				return RestResult.error(ResponseCode.EXCEPTION, "记录不存在");
			}
			MStoreStockWarningResponse bo = new MStoreStockWarningResponse();
			BeanUtils.copyProperties(result, bo);
			return RestResult.success(bo);
		}
		log.info("查询详情请求结束");
		return RestResult.success(new MStoreStockWarningResponse());
	}
	 /**
		 * 分页查询
		*
		* @param request 分页查询请求参数
		* @return 分页列表
		  * @throws Throwable 业务异常和系统异常
		 */
	@PostMapping("/listPage")
	@ApiOperation(value = " 分页查询列表 ")
	@ResponseBody
	public RestResult<PageResult<MStoreStockWarning>> listPage (@RequestBody MStoreStockWarningRequest request) throws Throwable {
	 MStoreStockWarning param = new MStoreStockWarning();
	 BeanUtils.copyProperties(request, param);

	 param.setDeleteFlag(0);return RestResult.success(service.listPageBySelective(param, request.getPageNum(),request.getPageSize()));
	}

	@PostMapping("/listPageAll")
	@ApiOperation(value = " 分页查询列表 ")
	@ResponseBody
	public RestResult<PageResult<MStoreStockWarningResponse>> listPageAll (@RequestBody MStoreStockWarningRequest request) throws Throwable {
		MStoreStockWarning param = new MStoreStockWarning();
		BeanUtils.copyProperties(request, param);
		param.setDeleteFlag(0);
			return RestResult.success(service.listPageBySelectiveAll(param, request.getPageNum(),request.getPageSize()));
		}

	/**
		 * m_warehouse 查询列表（不分页）
		 * @param  request 前端请求参数
	 */
	 @PostMapping("/listAll")
	 @ApiOperation(value = "不分页查询 [库存预警表] ")
	 @ResponseBody
	 public RestResult<List<MStoreStockWarningResponse>>  listMStoreStockWarningAllRecord(@RequestBody MStoreStockWarningRequest request) throws Throwable {
			MStoreStockWarning param = new MStoreStockWarning();
			BeanUtils.copyProperties(request, param);
			param.setDeleteFlag(0);

			List<MStoreStockWarning> list = service.listAllRecord(param);
				List<MStoreStockWarningResponse> responseList = list.stream().map(temp -> {
				MStoreStockWarningResponse bo = new MStoreStockWarningResponse();
				BeanUtils.copyProperties(temp, bo);
				return bo;
				}).filter(item -> item != null).collect(Collectors.toList());
			return RestResult.success(responseList);
	}

}

